﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace Librerias.Controles
{
    public partial class CTRLSelectorMultiple : UserControl
    {

        ArrayList ENelementosArray = null;
        int tipoTablaOrigen;


        public CTRLSelectorMultiple()
        {
            InitializeComponent();
            
        }

        public void setNombre(String nom)
        {
            groupBox1.Text = nom;
        }
        public bool sinSeleccion()
        {
            return ( lbDestino.Items.Count == 0);
        }
        // Le pasamos el nombre de la tabla de la que tiene que obtener los datos
        // 0 asignaturas , 1 departamentos
        public void cargaListBox(int tipoTablaOrige)
        {
            tipoTablaOrigen = tipoTablaOrige;
            ENAsignatura asig = new ENAsignatura();
            ENDepartamento depart = new ENDepartamento();

            try
            {
                if (tipoTablaOrigen == 0)
                {
                    ENelementosArray = asig.ConsultaAsignaturas();

                    if (ENelementosArray.Count == 0)
                    {
                        throw new Exception("Error. Este profesor no tiene asignaturas.");
                    }
                    lbOrigen.Items.Clear();
                    foreach (ENAsignatura asi in ENelementosArray)
                    {
                        lbOrigen.Items.Add(asi.Nombre);
                    }
                }
                else
                {
                    ENelementosArray = depart.ConsultaDepartamento();

                    if (ENelementosArray.Count == 0)
                    {
                        throw new Exception("Error. Este profesor no tiene asignaturas.");
                    }
                    lbOrigen.Items.Clear();

                    for (int i = 2; i < ENelementosArray.Count; i++)
                    {
                        lbOrigen.Items.Add(((ENDepartamento)ENelementosArray[i]).Codigo + ": " + ((ENDepartamento)ENelementosArray[i]).NombreDepart);
                    }
                  
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.StackTrace + "\r\n" + e.Message);
            }

        }
        /// <summary>
        /// Devuelve un ArrayList de ENElementos en el ListBox
        /// </summary>
        
        public ArrayList dameENElementosEnlistBox()
        {
            ArrayList seleccionados = new ArrayList();
            
                if (tipoTablaOrigen == 0) // asig
                {
                    foreach (Object o in lbDestino.Items)
                    {
                        foreach (ENAsignatura a in ENelementosArray)
                        {
                            if (((String)o).Contains(a.Nombre.Trim()))
                            {
                                seleccionados.Add(a);
                                break;
                            }
                        }
                    }

                }
                else // dep
                {
                    foreach (Object o in lbDestino.Items)
                    {
                        
                            foreach (ENDepartamento d in ENelementosArray)
                            {
                                if (((String)o).Contains(d.Codigo.Trim()))
                                {
                                    seleccionados.Add(d);
                                    break;
                                }
                            }
                        
                    }
                }
                return seleccionados;            
        }

        /// <summary>
        /// Devuelve un arrayList con codigos(Strings) de lo que tengamos en el ListBox
        /// </summary>       
        public ArrayList dameElegidosCodigos()
        {
            ArrayList coleccionCodigosElementos = new ArrayList();
            ArrayList ENelegidosArray = dameENElementosEnlistBox();
            String cod="";

            for (int i = 0; i < ENelegidosArray.Count; i++)
            {
                if (tipoTablaOrigen == 0) { cod = ((ENAsignatura)ENelegidosArray[i]).Codigo; }
                else if (tipoTablaOrigen == 1) { cod = ((ENDepartamento)ENelegidosArray[i]).Codigo; }
                coleccionCodigosElementos.Add(cod.Trim());
            }
            return coleccionCodigosElementos;
        }

        private void btAnyade_Click(object sender, EventArgs e)
        {
            ArrayList losItems = new ArrayList(lbOrigen.SelectedItems);
            if (losItems.Count > 0)
            {
                lbDestino.Items.AddRange(losItems.ToArray());
                for (int i = 0; i < losItems.Count; i++)
                {
                    lbOrigen.Items.Remove(losItems[i]);
                }

            }
            lbOrigen.SelectedItems.Clear();
            lbDestino.SelectedItems.Clear();
        }

        private void btRetira_Click(object sender, EventArgs e)
        {
            ArrayList losItems = new ArrayList(lbDestino.SelectedItems);
            if (losItems.Count > 0)
            {
                lbOrigen.Items.AddRange(losItems.ToArray());
                for (int i = 0; i < losItems.Count; i++)
                {
                    lbDestino.Items.Remove(losItems[i]);
                }
            }
            lbDestino.SelectedItems.Clear();
            lbOrigen.SelectedItems.Clear();

        }

        private void btLimpia_Click(object sender, EventArgs e)
        {
            ArrayList losItems = new ArrayList(lbDestino.Items);
            if (losItems.Count > 0)
            {
                lbOrigen.Items.AddRange(losItems.ToArray());
                lbDestino.Items.Clear();
                lbOrigen.SelectedItems.Clear();
            }
        }

        public void Reinicia()
        {
            btLimpia.PerformClick();
        }

      
    }
}
